package persistencia;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import negocio.Alumno;
import negocio.Area;
import negocio.Asistencia;
import negocio.Clase;
import negocio.Cursada;

public class AsistenciaDAO 
{
	private Connection c;
	private static AsistenciaDAO instancia;
	
	private AsistenciaDAO()
	{
		c = BDManager.getInstance().getConexion();
	}
	
	public static AsistenciaDAO  getInstance()
	{
		if(instancia == null)
			instancia = new AsistenciaDAO();
		return instancia;
	}
	
	public void guardar(Asistencia asistencia)
	{
		String query = String.format("INSERT INTO asistio(estadoasistencia, alumno_fk, clase_fk) VALUES (%b,%s,%d)", 
				asistencia.isAsistio(), asistencia.getAlumno().getDni(), asistencia.getClase().getId());
		Statement s;
		try {
			s = c.createStatement();
			s.execute(query);
			s.close();
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
	
	
	public ArrayList<Asistencia> getAsistencia(Clase clase)
	{
		String query = "SELECT * FROM asistio WHERE clase_fk=" + clase.getId();
		Statement s;
		ResultSet rs;
		ArrayList<Asistencia> res = new ArrayList<Asistencia>();
		
		Cursada cursada = clase.getCursada();
		ArrayList<Alumno> alumnos = AlumnoDAO.getInstance().getAlumno(cursada);
		
		
		try {
			s = c.createStatement();
			rs = s.executeQuery(query);
			while(rs.next())
			{
				String idalumno = rs.getString(3);
				
				for(Alumno alumno: alumnos)
				{
					if(alumno.getDni().equals(idalumno))
						res.add(new Asistencia(rs.getInt("id"),clase, alumno, rs.getBoolean(2)));
				}
			}
			s.close();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
		return res;
	}
	
	public void actualizar(Asistencia asistencia)
	{
		String query = "UPDATE asistio  SET estadoasistencia="+ asistencia.isAsistio()+" WHERE id="+ asistencia.getId();
		Statement s;
		try {
			s = c.createStatement();
			s.execute(query);
			s.close();
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
}
